package bing.tij4.dynamicproxy;

import java.lang.reflect.Proxy;

/**
 * 动态代理是Java中一个很重要的特性，是RMI和Spring aop等技术的基础。
 * 
 * 主要使用到两个类：
 * Proxy--提供了几个静态方法，主要用到newProxyInstance()方法，返回可以使用的接口对象。
 * 
 * InvocationHandler--接口，只有一个方法定义--invoke(),实现对真实对象方法的调用。
 * 
 */
public class SimpleDynamicProxy {

	public static void consumer(Interface iface) {
		iface.doSomething();
		iface.somethingElse("bonobo");
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		RealObject realObject=new RealObject();
		consumer(realObject);

		System.out.println("##########dynamic proxy below###########");
		/*Interface proxy=(Interface)Proxy.newProxyInstance(realObject.getClass().getClassLoader(),
				realObject.getClass().getInterfaces(), new DynamicProxyHandler(realObject));
		*/
		
		Interface proxy=(Interface)Proxy.newProxyInstance(Interface.class.getClassLoader(),
				new Class[] {Interface.class}, new DynamicProxyHandler(realObject));

		
		proxy.doSomething();
		proxy.somethingElse("123");
	}

}
